package com.ToxicBakery.lollipop.demo; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.ViewAnimationUtils; import com.ToxicBakery.lollipop.R; public class RevealActivity extends Activity { private View imageToReveal; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_demo_reveal); imageToReveal = findViewById(R.id.imageView); } public void onRevealTapped(View view) { if (imageToReveal.getVisibility() == View.INVISIBLE) { playRevealAnimationForView(imageToReveal); } else { playHideAnimationForView(imageToReveal); } } private void playRevealAnimationForView(final View revealView) { // get the center for the clipping circle Animator anim = getRevealAnimation(revealView); anim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { super.onAnimationStart(animation); revealView.setVisibility(View.VISIBLE); } }); anim.start(); } private void playHideAnimationForView(final View viewToHide) { Animator anim = getHideAnimation(viewToHide); anim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); viewToHide.setVisibility(View.INVISIBLE); } }); anim.start(); } private Animator getHideAnimation(View viewToHide) { int cx = (viewToHide.getLeft() + viewToHide.getRight()) / 2; int cy = (viewToHide.getTop() + viewToHide.getBottom()) / 2; int initialRadius = viewToHide.getWidth(); int finalRadius = 0; return ViewAnimationUtils.createCircularReveal(viewToHide, cx, cy, initialRadius, finalRadius); } private Animator getRevealAnimation(View revealView) { int cx = (revealView.getLeft() + revealView.getRight()) / 2; int cy = (revealView.getTop() + revealView.getBottom()) / 2; // get the final radius for the clipping circle int finalRadius = revealView.getWidth(); int initialRadius = 0; // create and start the animator for this view // (the start radius is zero) return ViewAnimationUtils.createCircularReveal(revealView, cx, cy, initialRadius, finalRadius); } }